package day06;

import java.io.File;
import java.io.FileFilter;
import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

import org.junit.Test;

/**
 * 编写一个程序，将当前目录下所有的员工文件进行读取，并解析出所有员工为Emp
 * 对象并存入Map。其中key为该员工的名字，value为该员工的emp对象。
 * 然后，要求用户输入一个员工名字，若该员工存在，则输出该员工的名字，年龄，工资，以及入职20周年的纪念日当周的周六的日期。
 * 即:输入名字"张三"
 * 若该员工存在，则输出如下格式:
 * 张三,25,5000,2006-02-14
 * 入职20周年纪念日派对日期: 2026-02-14  （注:若入职日期为:2006-02-14）
 * 若该员工不存在，则输出:"查无此人"
 * @author Bonnie
 *
 */
public class Test12 {
	@Test
	public void test() throws Exception {
		Scanner console = new Scanner(System.in);
		File dir = new File(".");
		Map<String, Emp> map = new HashMap<String, Emp>();
		File[] files = dir.listFiles(new FileFilter() {// 筛选后缀.emp

			@Override
			public boolean accept(File file) {
				return file.getName().endsWith(".emp");
			}
			
		});
		for (File f : files) {
			Emp emp = emps(f);
			map.put(emp.getName(), emp);
		}
		System.out.print("请输入员工姓名：");
		String name = console.next();
		if (map.containsKey(name)) {
			Emp a = map.get(name);
			System.out.println(a);
			Calendar cal = Calendar.getInstance();// 计算20周年
			cal.setTime(a.getHiredate());
			cal.add(Calendar.YEAR, 20);
			cal.set(Calendar.DAY_OF_WEEK, 7);// 设定周六
			Date anniversary = cal.getTime();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			System.out.println("入职20周年纪念日派对日期:" + sdf.format(anniversary));
		} else {
			System.out.println("查无此人");
		}
		console.close();
	}
	
	public Emp emps(File f) throws Exception {
		RandomAccessFile raf = new RandomAccessFile(f, "r");
		byte[] bs = new byte[(int)f.length()];
		int len = raf.read(bs);
		String info = new String(bs, 0, len);
		String[] ss = info.split(",");
		String name = ss[0];
		int age = Integer.parseInt(ss[1]);
		String gender = ss[2];
		int salary = Integer.parseInt(ss[3]);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date hiredate = sdf.parse(ss[4]);
		Emp emp = new Emp(name, age, gender, salary, hiredate);
		raf.close();
		return emp;
	}
}
